package org.jeecg.modules.manage.technology.service.ai;


import dev.langchain4j.service.spring.AiService;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import org.jeecg.modules.manage.technology.service.ai.record.PatentTechnologyAnalysis;

/**
 * AI助手服务接口
 * 使用LangChain4j的声明式API (@AiService)
 *
 * @Author: jeecg-boot
 * @Date: 2025-11-04
 * @Version: V1.0
 */
@AiService
public interface AiAssistant {

    /**
     * 通用聊天对话
     * @param userMessage 用户消息
     * @return AI回复
     */
    @SystemMessage("You are a polite and helpful assistant.")
    String chat(String userMessage);

    /**
     * 专利技术分析（结构化输出版本）
     * 同时完成技术谱系分析和美国政府资助判断
     *
     * @param patentText 专利文本内容
     * @param genealogyOptions 可选的技术谱系列表
     * @return 结构化的技术分析结果（包含政府资助信息）
     */
    @SystemMessage("""
        你是一个专业的专利分析专家。请同时完成以下两个任务：
        
        # 任务A：技术谱系分析
        1. 深入理解专利的技术内容和创新点，必须是专利使用的技术，而不是引用的技术
        2. 从提供的技术谱系选项中选择最匹配的类别
        3. 可以选择多个相关的技术谱系，但要确保相关性
        4. 评估分析的置信度（0.0-1.0）
        5. 只能选择提供列表中存在的技术谱系ID
        注意事项：
        - 只能选择提供列表中存在的技术谱系ID
        - 如果不确定，宁可返回空数组也不要猜测
        - 置信度要实事求是，不要过度自信
        可选的技术谱系：
        {{genealogyOptions}}
        
        任务B：美国政府资助判断（极其严格）
        最高优先原则：宁可漏掉，绝不误判！只有100%确定的情况下才能标记为政府资助。
        
        必须同时满足以下所有条件才能认定为美国政府资助：
        1. 明确的政府资助声明：
           - 必须有明确的 "This invention was made with government support" 或任何明确表示该发明/工作/研究是由所列美国政府机构通过资金、资助、合同等形式支持的声明
           - 必须有具体的政府机构名称：NSF, NIH, DOD, DOE, NASA, DARPA, USDA, EPA, DHS, VA, NIST, NOAA, DOT, ED,DOC,SSRC
           - 必须有具体的项目编号：例如但不限于"Grant No.", "Contract No.", "Agreement No." + 具体编号
        2. 政府权利声明：
           - 必须明确声明 "The Government has certain rights in the invention" 或类似
        
        以下情况绝对不能认定为政府资助：
        - 仅提及政府机构名称但无资助声明
        - 仅有大学或研究机构名称但无政府资助声明
        - 模糊或不确定的表述
        - 非美国政府机构的资助
        - 私人公司或非政府机构的资助
        记住：如果政府资助有任何疑问或不确定，必须返回 isUsGovFunded="0"！
        
        """)
    @UserMessage("请同时完成以下专利的技术谱系分析和美国政府资助判断：\n\n专利文本：{{patentText}}")
    PatentTechnologyAnalysis analyzePatentTechnologyStructured(@V("patentText") String patentText,
                                                             @V("genealogyOptions") String genealogyOptions);
}
